#include <stdio.h>
#include "link.h"
#include "main.h"
#include <stdlib.h>
#include <string.h>
#include "player.h"
#include <stdlib.h>
#include <time.h>

struct Node* head;

//初始化链表
int initLink()
{
        head=(Node*)malloc(sizeof(Node)*1);
        if(head==NULL){
                return FAILURE;
        }
        head->next=head;
        head->prior=head;
        return SUCCESS;
}
//插入链表
int insertLink(Node* h,const char* name)
{
        if(h==NULL || name==NULL){
                return FAILURE;
        }

        Node* end=h->prior;

        Node* new=(Node*)malloc(sizeof(Node)*1);
        if(new==NULL){
                return FAILURE;
        }
        strcpy(new->music_name,name);
        new->next=h;
        h->prior=new;
        end->next=new;
        new->prior=end;
        
        return SUCCESS;

}
/*根据播放模式，找到下一首歌，自动切换歌曲时采用这个函数
cur:当前歌曲
mode:播放模式
next:下一首歌
*/
void findNextMusic(const char* cur,int mode,char* next)
{
        if(mode==CIRCLE){
                strcpy(next,cur);
                return;
        }
        else if(mode==SEQUENCEMODE){
                Node* p=head->next;
                while(strcmp(p->music_name,cur)!=0){
                        p=p->next;
                }
                //跳过头节点
                if(p->next==head){
                        p=p->next;
                }
                p=p->next;
                strcpy(next,p->music_name);
                return;
        }
        else{
                Node* p=head->next;
                int i;
                srand(time(NULL));
                int num=rand()%100;
                for(i=0;i<num;i++){
                        p=p->next;
                }
                //跳过头节点
                if(p==head){
                        p=p->next;
                }
                strcpy(next,p->music_name); 
                return;
        }

}
//输入上一首指令，明确要找上一首时使用这个函数
void PriorMusic(const char* cur,int mode,char* prior)
{
        if(mode==SEQUENCEMODE || mode==CIRCLE){
                Node* p=head->next;
                while(strcmp(p->music_name,cur)!=0){
                        p=p->next;
                }
                if(p->prior==head){
                        p=p->prior;
                }
                p=p->prior;
                strcpy(prior,p->music_name);
                return;
        }
        else{
                Node* p=head->prior;
                int i;
                
                srand(time(NULL));
                int num=rand()%100;
                for(i=0;i<num;i++){
                        p=p->prior;
                }
                if(p==head){
                        p=p->prior;
                }
                strcpy(prior,p->music_name); 
                return;
        }
}
//输入下一首指令，明确要找下一首时使用这个函数
void NextMusic(const char* cur,int mode,char* next)
{
        if(mode==SEQUENCEMODE || mode==CIRCLE){
                Node* p=head->next;
                while(strcmp(p->music_name,cur)!=0){
                        p=p->next;
                }
                //跳过头节点
                if(p->next==head){
                        p=p->next;
                }
                p=p->next;
                strcpy(next,p->music_name);
                return;
        }
        else{
                Node* p=head->next;
                int i;
                srand(time(NULL));
                int num=rand()%100;
                for(i=0;i<num;i++){
                        p=p->next;
                }
                //跳过头节点
                if(p==head){
                        p=p->next;
                }
                strcpy(next,p->music_name); 
                return;
        }
}